package com.ruoyi.web.petmall.pethome.service.impl;

import com.ruoyi.web.petmall.entity.PetInfoEntity;
import com.ruoyi.web.petmall.entity.PhotoEntity;
import com.ruoyi.web.petmall.entity.vo.TypeVO;
import com.ruoyi.web.petmall.pethome.mapper.PhotoMapper;
import com.ruoyi.web.petmall.pethome.service.PhotoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * PhotoServiceImpl类，实现了PhotoService接口。
 * 处理与照片和宠物信息相关的具体业务逻辑。
 */
@Service
public class PhotoServiceImpl implements PhotoService {

    /**
     * PhotoMapper，用于与数据库交互以获取照片和宠物信息。
     */
    @Autowired
    private PhotoMapper photoMapper;

    /**
     * 获取轮播图图片。
     *
     * @param photoEntity 查询条件。
     * @return 符合条件的轮播图图片列表。
     */
    @Override
    public List<PhotoEntity> getPhoto(PhotoEntity photoEntity) {
        return photoMapper.getPhoto(photoEntity);
    }

    /**
     * 根据条件查询宠物信息。
     *
     * @param petInfoEntity 查询条件。
     * @return 符合条件的宠物信息列表。
     */
    @Override
    public List<PetInfoEntity> getPetInfo(PetInfoEntity petInfoEntity) {
        return photoMapper.getPetInfo(petInfoEntity);
    }

    /**
     * 查询首页的宠物信息，并按类型分组。
     *
     * @return 按宠物类型分组的宠物信息映射。
     */
    @Override
    public Map<String, List<PetInfoEntity>> getPetInfoHome() {
        // 获取宠物信息列表
        List<PetInfoEntity> petInfoList = photoMapper.getPetInfoHome();

        // 使用 Java Streams API 进行分组
        return petInfoList.stream()
                .collect(Collectors.groupingBy(
                        petInfo -> {
                            String typeName = petInfo.getTypeName();
                            // 如果 typeName 为 null，用一个默认值代替
                            return typeName != null ? typeName : "unknown";
                        }
                ));
    }

    /**
     * 查询宠物类型及其对应的宠物信息。
     *
     * @return 包含宠物类型及其宠物信息的列表。
     */
    @Override
    public List<TypeVO> getType() {
        // 获取宠物信息列表
        List<PetInfoEntity> petInfoList = photoMapper.getPetInfoHome();

        // 使用 Map 进行分组
        Map<String, List<PetInfoEntity>> groupedByTypeName = new HashMap<>();

        for (PetInfoEntity petInfo : petInfoList) {
            String typeName = petInfo.getTypeName();
            groupedByTypeName
                    .computeIfAbsent(typeName, k -> new ArrayList<>())
                    .add(petInfo);
        }

        // 将分组后的结果转换为 List<TypeVO>
        return groupedByTypeName.entrySet().stream()
                .map(entry -> new TypeVO(entry.getKey(), entry.getValue()))
                .collect(Collectors.toList());
    }
}
